package com.zj.eurekaserver.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * 注意这个oauth_client_details（这个表的意思是，允许接入的客户端） 是 spring security oauth2 自带的源码里面需要查询的表，init_oauth.sql 里面对这表插入了数据，只有client_id ,client_secret,
 *  web_server_redirect_uri这个重定向url（这些是授权服务器会去查询的，然后和客户端传的信息做比对，校验） ，这些全部和 客户端传过来的信息一致时，这个客户端才会校验通过。
 *
 *  比如客户端传的东西：
 *  http://localhost:9000/oauth/authorize?client_id=CouponSystem&redirect_uri=http://localhost:9002/login&response_type=code&state=hZ72zC
 *
 *
 *  授权服务器查询的允许接入的客户端信息：
 *  select client_id, client_secret, resource_ids, scope, authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, refresh_token_validity, additional_information, autoapprove from oauth_client_details where client_id = 'CouponSystem'
 *
 *  这里需要注意的是不要忘记设置cookie-name，不然会有一些莫名其妙的问题，比如“User must be authenticated with Spring Security before authorization can be completed
 *
 *  这里最重要的是应用了@EnableOAuth2Sso注解。
 *
 *  具体链接：https://www.cnblogs.com/cjsblog/p/9296361.html
 *
 * spring security oauth2 认证完（就是根据code获取到token，这一步是用rpc调用的，在浏览器控制台看不到）之后，会把token即用户的信息存到单机的jvm 的session，后面根据sessionid去查本机的用户信息就可以了，不用每次都去授权中心验证，这样太慢了。就算是集群下有多个节点，就是每个节点访问到时，去授权中心 验证一次而已，不要紧，速度也挺快的。单点退出的话，就可以记录所有登录过的节点的地址，退出时一个个回调退出即可（单点退出之后可以问问别人有没有好方案）。
 */
@EnableEurekaServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class EurekaserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaserverApplication.class, args);
    }

}
